package cn.wdm.system.service.impl;

import cn.wdm.system.domain.Menu;
import cn.wdm.system.mapper.MenuMapper;
import cn.wdm.system.service.IMenuService;
import cn.wdm.basic.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author laozhang
 * @since 2022-06-21
 */
@Service
public class MenuServiceImpl extends BaseServiceImpl<Menu> implements IMenuService {
    @Autowired
    private MenuMapper menuMapper;
    @Override
    public List<Menu> getMenuTree() {
        //查询全部
        List<Menu> menus = menuMapper.loadAll();
        //建立map集合
        HashMap<Long, Menu> treeMap = new HashMap<Long, Menu>();
        //将每次遍历的值给map集合，key是id，valule是自己
        for (Menu menu : menus) {
            treeMap.put(menu.getId(),menu);
        }
        //查找祖宗部门
        ArrayList<Menu> firstMenus = new ArrayList<>();
        //遍历查找自己上一级，如果没有上一级就是祖宗，将其放入到指定的集合里面
        //如果有上一级，就将自己放到，爹的department的children集合里面
        for (Menu menu : menus) {
            //当前对象没有上级的id，就是祖宗，放到祖宗集合里面
            if (menu.getParentId()==null){
                firstMenus.add(menu);
            }else{
                //有上级的id，将上级的部门查到，将自己放到上级部门的children中
                //这是上级部门
                Menu parentDept = treeMap.get(menu.getParentId());
                //将自己放到上级部门的children中
                if(parentDept!=null){
                    parentDept.getChildren().add(menu);
                }
            }
        }
        return firstMenus;
    }
}
